#include "MenuPrincipal.h"
#include "ConstantesGlobais.h"
#include "MenuPrincipalConstantes.h"
#include "Funcoes.h"
#include "Mensagens.h"
#include "MenuVeiculo.h"
#include "MenuPedido.h"
#include<iostream>
#include<conio.h>

using namespace std;
using namespace entregadepedidos::util::funcoes;
using namespace entregadepedidos::util::global;
using namespace entregadepedidos::entidades::submenu;

namespace entregadepedidos{

	namespace entidades{
	
		namespace menu{
	
			//Construtor
			MenuPrincipal::MenuPrincipal(const int &numeroItens): Menu(numeroItens){}
				
			MenuPrincipal::~MenuPrincipal(){}
			
			void MenuPrincipal::getOpcao() throw(MenuPrincipalException){
				char selectMenu;
				
				try{
				
				do{
				
				imprime();
				
				selectMenu=getch();
							
				switch(selectMenu){	
				
							case '1':
								Opcao1();
								break;
								
							case '2':		
								Opcao2();
								break;
								
							case '3':		
								Opcao3();
								break;
								
							case '4':
								break;
																			
							default: 
								
								cout << endl << Mensagens::GET_MENU_OPCAO_INVALIDA();
								
								// Metodo para pausar o programa
								Funcoes::pausarPrograma();
								
							}
							
						}while(selectMenu!='4');
				
				}catch(FuncoesException ex){
					throw MenuPrincipalException(ex.what(), ex.getDescricao());	
				}catch(MenuException ex){
					throw MenuPrincipalException(ex.what(), ex.getDescricao());
				}catch(...){
					throw MenuPrincipalException(ConstantesGlobais::GET_ERRO(),Mensagens::GET_MENUPRINCIPAL_GETOPCAO_ERRO());
				}		
						
			}
			
			void MenuPrincipal::Opcao1()const throw(MenuPrincipalException){
				
				try{
					
					cout << endl << "teste menu1";
					
					// Metodo para pausar o programa
					Funcoes::pausarPrograma();
					
				
				}catch(FuncoesException ex){
					throw MenuPrincipalException(ex.what(), ex.getDescricao());	
				}catch(...){
					throw MenuPrincipalException(ConstantesGlobais::GET_ERRO(),Mensagens::GET_MENUPRINCIPAL_OPCAO1_ERRO());					
				}
			
			}
			
			void MenuPrincipal::Opcao2()const throw(MenuPrincipalException){
				
				try{
					
					MenuPedido *menuPedido = new MenuPedido(3);
									menuPedido->setTitulo(MenuPrincipalConstantes::GET_CABECALHO_PEDIDO());
									menuPedido->adicionaItem(0, MenuPrincipalConstantes::GET_MENU21());
									menuPedido->adicionaItem(1, MenuPrincipalConstantes::GET_MENU22());
									menuPedido->adicionaItem(3, MenuPrincipalConstantes::GET_VOLTAR());
									menuPedido->getOpcao();				
					
				}catch(MenuException ex){
					throw MenuPrincipalException(ex.what(), ex.getDescricao());
				}catch(...){
					throw MenuPrincipalException(ConstantesGlobais::GET_ERRO(),Mensagens::GET_MENUPRINCIPAL_OPCAO2_ERRO());
				}				
				
			}
			
			void MenuPrincipal::Opcao3()const throw(MenuPrincipalException){
				
				try{
				
				MenuVeiculo *menuVeiculo = new MenuVeiculo(4);
				menuVeiculo->setTitulo(MenuPrincipalConstantes::GET_CABECALHO_VEICULO());
				menuVeiculo->adicionaItem(0, MenuPrincipalConstantes::GET_MENU31());
				menuVeiculo->adicionaItem(1, MenuPrincipalConstantes::GET_MENU32());
				menuVeiculo->adicionaItem(2, MenuPrincipalConstantes::GET_MENU33());
				menuVeiculo->adicionaItem(3, MenuPrincipalConstantes::GET_VOLTAR());
				menuVeiculo->getOpcao();
				
				}catch(MenuException ex){
					throw MenuPrincipalException(ex.what(), ex.getDescricao());
				}catch(...){
					throw MenuPrincipalException(ConstantesGlobais::GET_ERRO(),Mensagens::GET_MENUPRINCIPAL_OPCAO3_ERRO());
				}
				
			}
		
		}
		
	}

}
